bitkeeper revision 1.1402 (4284c140AGr7UEnDR8q3JG62gMR37g)
authormjw@wray-m-3.hpl.hp.com <mjw@wray-m-3.hpl.hp.com>
Fri, 13 May 2005 15:01:20 +0000 (15:01 +0000)
committermjw@wray-m-3.hpl.hp.com <mjw@wray-m-3.hpl.hp.com>
Fri, 13 May 2005 15:01:20 +0000 (15:01 +0000)
Merge iostream fixes.
Signed-off-by: Mike Wray <mike.wray@hp.com>
.rootkeys
tools/libxutil/file_stream.c
tools/libxutil/gzip_stream.c
tools/libxutil/iostream.h
tools/libxutil/kernel_stream.c
tools/libxutil/string_stream.c
tools/xfrd/http.h [deleted file]
tools/xfrd/xdr.c [deleted file]
tools/xfrd/xdr.h [deleted file]

index ecf9e91ace0bab6ec5d63baf57248943c269508c..df709f294d2544957eb53236407f71e8d5b8bf78 100644 (file)
--- a/.rootkeys
+++ b/.rootkeys
 40e9808eysqT4VNDlJFqsZB2rdg4Qw tools/xfrd/connection.c
 40e9808eyXfJUi4E0C3WSgrEXqQ1sQ tools/xfrd/connection.h
 40e9808eULGwffNOE4kBrAfZ9YAVMA tools/xfrd/debug.h
-411b5139tfKZfWs1LQHmwDR_wjKoxQ tools/xfrd/http.h
 40e9808ePADCSKL1YgGCt2TbYPnYkw tools/xfrd/lzi_stream.c
 40e9808eDNAdpF71o5teYb9DTT-PRw tools/xfrd/lzi_stream.h
 40e9808eQxi0EzTcPJtosrzxEIjA-Q tools/xfrd/marshal.c
 40e9808etg13xfRm0Lqd8vY-jHOoTg tools/xfrd/marshal.h
 40e9808eCsmywryb036TdtRMJHDMmQ tools/xfrd/select.c
 40e9808e99OcM547cKMTfmCVSoWVAw tools/xfrd/select.h
-40e9808eF3NVldqRNS5IHM8gbFAvpw tools/xfrd/xdr.c
-40e9808ezXzoRHm7pybXU69NtnjimA tools/xfrd/xdr.h
 40e9808edpUtf4bJ8IbqClPJj_OvbA tools/xfrd/xen_domain.c
 40e9808eHviFFIwdUKOA234uIeifjA tools/xfrd/xen_domain.h
 40e9808eIFeV-MDCNyVTNt5NfMPKeQ tools/xfrd/xfrd.c
index ca7b9d16802c8aee95c34cb2ab7aacf67b707b2b..7adbac0fa774385430cb7a23fddb2218ca0e410a 100644 (file)
@@ -46,18 +46,21 @@ static const IOMethods file_methods = {
 static IOStream _iostdin = {
     methods: &file_methods,
     data: (void*)1,
+    nofree: 1,
 };
 
 /** IOStream for stdout. */
 static IOStream _iostdout = {
     methods: &file_methods,
     data: (void*)2,
+    nofree: 1,
 };
 
 /** IOStream for stderr. */
 static IOStream _iostderr = {
     methods: &file_methods,
     data: (void*)3,
+    nofree: 1,
 };
 
 /** IOStream for stdin. */
@@ -152,10 +155,7 @@ static int file_error(IOStream *s){
  */
 static int file_close(IOStream *s){
     int result = 0;
-    if (s->data){
-        result = fclose(get_file(s));
-        s->data = (void*)0;
-    }
+    result = fclose(get_file(s));
     return result;
 }
 
@@ -164,7 +164,7 @@ static int file_close(IOStream *s){
  * @param s file stream
  */
 static void file_free(IOStream *s){
-    file_close(s);
+    // Nothing extra to do - close did it all.
 }
 
 /** Create an IOStream for a stream.
@@ -175,8 +175,8 @@ static void file_free(IOStream *s){
 IOStream *file_stream_new(FILE *f){
     IOStream *io = ALLOCATE(IOStream);
     if(io){
-       io->methods = &file_methods;
-       io->data = (void*)f;
+        io->methods = &file_methods;
+        io->data = (void*)f;
     }
     return io;
 }
@@ -191,10 +191,10 @@ IOStream *file_stream_fopen(const char *file, const char *flags){
     IOStream *io = 0;
     FILE *fin = fopen(file, flags);
     if(fin){
-       io = file_stream_new(fin);
-       if(!io){
-           fclose(fin);
-       }
+        io = file_stream_new(fin);
+        if(!io){
+            fclose(fin);
+        }
     }
     return io;
 }
@@ -211,8 +211,9 @@ IOStream *file_stream_fdopen(int fd, const char *flags){
     FILE *fin = fdopen(fd, flags);
     if(fin){
         io = file_stream_new(fin);
-        if(!io)
+        if(!io){
             fclose(fin);
+        }
     }
     return io;
 }
index d3bedbf2175f415bfe6b7a5d1c00cf76f6359467..ea14b82580735bac0d0ac936b7b13a5fc411757a 100644 (file)
@@ -39,7 +39,7 @@ static int gzip_flush(IOStream *s);
 
 /** Methods used by a gzFile* IOStream. */
 static const IOMethods gzip_methods = {
-    read: gzip_read,
+    read:  gzip_read,
     write: gzip_write,
     error: gzip_error,
     close: gzip_close,
@@ -108,10 +108,7 @@ static int gzip_error(IOStream *s){
  */
 static int gzip_close(IOStream *s){
     int result = 0;
-    if (s->data){
-        result = gzclose(get_gzfile(s));
-        s->data = (void*)0;
-    }
+    result = gzclose(get_gzfile(s));
     return result;
 }
 
@@ -120,7 +117,7 @@ static int gzip_close(IOStream *s){
  * @param s gzip stream
  */
 static void gzip_free(IOStream *s){
-    gzip_close(s);
+    // Nothing to do - close did it all.
 }
 
 /** Create an IOStream for a gzip stream.
@@ -131,8 +128,8 @@ static void gzip_free(IOStream *s){
 IOStream *gzip_stream_new(gzFile *f){
     IOStream *io = ALLOCATE(IOStream);
     if(io){
-       io->methods = &gzip_methods;
-       io->data = (void*)f;
+        io->methods = &gzip_methods;
+        io->data = (void*)f;
     }
     return io;
 }
index d2fd6fcce1a85f9b309bfc819ab14693acf3f845..f41ca56629f59d23d527b8f9af9760455f300baf 100644 (file)
@@ -33,7 +33,7 @@
 
 #include "allocate.h"
 
-/** End of input return value. */
+/** End of input return value (for getc). */
 #define IOSTREAM_EOF -1
 
 /** An input/output abstraction.
@@ -82,6 +82,8 @@ struct IOStream {
     int written;
     /** Number of bytes read. */
     int read;
+    /** Flag indicating whether not to free when closed. */
+    int nofree;
 };
 
 
@@ -107,7 +109,7 @@ extern int IOStream_vprint(IOStream *io, const char *format, va_list args);
 static inline int IOStream_read(IOStream *stream, void *buf, size_t n){
     int result;
     if(stream->closed){
-        result = IOSTREAM_EOF;
+        result = -EIO;
         goto exit;
     }
     if(!stream->methods || !stream->methods->read){
@@ -132,7 +134,7 @@ static inline int IOStream_read(IOStream *stream, void *buf, size_t n){
 static inline int IOStream_write(IOStream *stream, const void *buf, size_t n){
     int result;
     if(stream->closed){
-        result = IOSTREAM_EOF;
+        result = -EIO;
         goto exit;
     }
     if(!stream->methods || !stream->methods->write){
@@ -150,15 +152,14 @@ static inline int IOStream_write(IOStream *stream, const void *buf, size_t n){
 /** Flush the stream.
  *
  * @param stream stream
- * @return 0 on success, IOSTREAM_EOF otherwise
+ * @return 0 on success, negative error code otherwise
  */
 static inline int IOStream_flush(IOStream *stream){
     int result = 0;
     if(stream->closed){
-        result = IOSTREAM_EOF;
+        result = -EIO;
     } else if(stream->methods->flush){
         result = (stream->methods->flush)(stream);
-        if(result < 0) result = IOSTREAM_EOF;
     }
     return result;
 }
@@ -179,14 +180,25 @@ static inline int IOStream_error(IOStream *stream){
 /** Close the stream.
  *
  * @param stream to close
- * @return 1 for error, 0 otherwise
+ * @return 0 on success, negative error code otherwise
  */
 static inline int IOStream_close(IOStream *stream){
-    int err = 1;
+    int err = 0;
+    if(!stream || stream->closed){
+        err = -EIO;
+        goto exit;
+    }
     if(stream->methods && stream->methods->close){
         err = (stream->methods->close)(stream);
         stream->closed = 1;
     }
+    if(stream->nofree) goto exit;
+    if(stream->methods && stream->methods->free){
+        (stream->methods->free)(stream);
+    }
+    *stream = (IOStream){};
+    deallocate(stream);
+  exit:
     return err;
 }
 
@@ -199,22 +211,6 @@ static inline int IOStream_is_closed(IOStream *stream){
     return stream->closed;
 }
 
-/** Free the memory used by the stream.
- *
- * @param stream to free
- */
-static inline void IOStream_free(IOStream *stream){
-    if(!stream->closed && stream->methods && stream->methods->close){
-        (stream->methods->close)(stream);
-    }
-    if(stream->methods && stream->methods->free){
-        (stream->methods->free)(stream);
-    }
-    *stream = (IOStream){};
-    deallocate(stream);
-}
-
-
 /** Print a character to a stream, like fputc().
  *
  * @param stream to print to
index a13051eec8476b0d0d922b533ac1408df53cd042..3c6b55223dbdfca7fbb09a0a4d81e8330a616ccb 100644 (file)
@@ -57,10 +57,10 @@ static void kernel_stream_unlock(IOStream *s);
 
 /** Methods for a kernel stream. Output only. */
 static const IOMethods kernel_methods = {
-  write:  kernel_write,
-  free:   kernel_free,
-  lock:   kernel_stream_lock,
-  unlock: kernel_stream_unlock,
+    write:  kernel_write,
+    free:   kernel_free,
+    lock:   kernel_stream_lock,
+    unlock: kernel_stream_unlock,
 };
 
 /** Shared state for kernel streams.
@@ -68,15 +68,16 @@ static const IOMethods kernel_methods = {
  * shared state and avoid allocating it.
  */
 static const KernelData kernel_data = {
-  lock: SPIN_LOCK_UNLOCKED,
-  flags: 0,
-  buf_n: BUF_N,
+    lock:  SPIN_LOCK_UNLOCKED,
+    flags: 0,
+    buf_n: BUF_N,
 };
 
 /** Stream for kernel printk. */
 static IOStream iokernel = {
     methods: &kernel_methods,
     data:    &kernel_data,
+    nofree:  1,
 };
 
 /** Stream for kernel printk. */
@@ -94,7 +95,7 @@ IOStream *iostderr = &iokernel;
  * @return kernel stream
  */
 IOStream get_stream_kernel(void){
-  return iokernel;
+    return iokernel;
 }
 
 /** Obtain the lock on the stream state.
@@ -102,7 +103,7 @@ IOStream get_stream_kernel(void){
  * @param kdata stream state
  */
 static inline void KernelData_lock(KernelData *kdata){
-  spin_lock_irqsave(&kdata->lock, kdata->flags);
+    spin_lock_irqsave(&kdata->lock, kdata->flags);
 }
 
 /** Release the lock on the stream state.
@@ -110,7 +111,7 @@ static inline void KernelData_lock(KernelData *kdata){
  * @param kdata stream state
  */
 static inline void KernelData_unlock(KernelData *kdata){
-  spin_unlock_irqrestore(&kdata->lock, kdata->flags);
+    spin_unlock_irqrestore(&kdata->lock, kdata->flags);
 }
 
 /** Get the stream state.
@@ -119,7 +120,7 @@ static inline void KernelData_unlock(KernelData *kdata){
  * @return stream state
  */
 static inline KernelData *get_kernel_data(IOStream *s){
-  return (KernelData*)s->data;
+    return (KernelData*)s->data;
 }
 
 /** Obtain the lock on the stream state.
@@ -146,14 +147,14 @@ void kernel_stream_unlock(IOStream *s){
  * @return result of the print
  */
 static int kernel_write(IOStream *stream, const void *buf, size_t n){
-  KernelData *kdata = get_kernel_data(stream);
-  int k;
-  k = kdata->buf_n - 1;
-  if(n < k) k = n;
-  memcpy(kdata->buf, buf, k);
-  kdata->buf[k] = '\0';
-  printk(kdata->buf);
-  return k;
+    KernelData *kdata = get_kernel_data(stream);
+    int k;
+    k = kdata->buf_n - 1;
+    if(n < k) k = n;
+    memcpy(kdata->buf, buf, k);
+    kdata->buf[k] = '\0';
+    printk(kdata->buf);
+    return k;
 }
 
 /** Free a kernel stream.
@@ -164,11 +165,11 @@ static int kernel_write(IOStream *stream, const void *buf, size_t n){
  * @param io stream to free
  */
 static void kernel_free(IOStream *io){
-  KernelData *kdata;
-  if(io == &iokernel) return;
-  kdata = get_kernel_data(io);
-  memset(kdata, 0, sizeof(*kdata));
-  deallocate(kdata);
+    KernelData *kdata;
+    if(io == &iokernel) return;
+    kdata = get_kernel_data(io);
+    memset(kdata, 0, sizeof(*kdata));
+    deallocate(kdata);
 }
 #endif /* __KERNEL__ */
 
index a535c922ffd5b9745048e3a33f25c0a7bf29b4d8..907e7d70ee502392de2337a3f3d109176706a297 100644 (file)
 static int string_error(IOStream *io);
 static int string_close(IOStream *io);
 static void string_free(IOStream *io);
+static int string_write(IOStream *io, const void *msg, size_t n);
+static int string_read(IOStream *io, void *buf, size_t n);
 
 /** Methods for a string stream. */
 static IOMethods string_methods = {
-    //print: string_print,
-    //getc:  string_getc,
+    read:  string_read,
+    write: string_write,
     error: string_error,
     close: string_close,
     free:  string_free,
@@ -47,6 +49,28 @@ static inline StringData *get_string_data(IOStream *io){
     return (StringData*)io->data;
 }
 
+static int string_write(IOStream *io, const void *msg, size_t n){
+    StringData *data = get_string_data(io);
+    int k;
+
+    k = data->end - data->out;
+    if(n > k) n = k;
+    memcpy(data->out, msg, n);
+    data->out += n;
+    return n;
+}
+
+static int string_read(IOStream *io, void *buf, size_t n){
+    StringData *data = get_string_data(io);
+    int k;
+
+    k = data->end - data->in;
+    if(n > k) n = k;
+    memcpy(buf, data->in, k);
+    data->in += n;
+    return n;
+}
+
 /** Test if a string stream has an error.
  *
  * @param io string stream
@@ -70,7 +94,6 @@ static int string_close(IOStream *io){
 }
 
 /** Free a string stream.
- * The stream must have been allocated, not statically created.
  * The stream state is freed, but the underlying string is not.
  *
  * @param io string stream
@@ -90,6 +113,9 @@ IOMethods *string_stream_get_methods(void){
 }
 
 /** Initialise a string stream, usually from static data.
+ * If the stream and StringData should be freed when
+ * the stream is closed, unset io->nofree.
+ * The string is not freed on close.
  *
  * @param io address of IOStream to fill in
  * @param data address of StringData to fill in
@@ -107,10 +133,12 @@ void string_stream_init(IOStream *io, StringData *data, char *s, int n){
         memzero(io, sizeof(*io));
         io->methods = &string_methods;
         io->data = data;
+        io->nofree = 1;
     }
 }
 
 /** Allocate and initialise a string stream.
+ * The stream is freed on close, but the string is not.
  *
  * @param s string to use
  * @param n length of the string
@@ -123,6 +151,7 @@ IOStream *string_stream_new(char *s, int n){
     if(data && io){
         ok = 1;
         string_stream_init(io, data, s, n);
+        io->nofree = 0;
     }
     if(!ok){
         deallocate(data);
diff --git a/tools/xfrd/http.h b/tools/xfrd/http.h
deleted file mode 100644 (file)
index 711ccc9..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-#ifndef _XFRD_HTTP_H_
-#define _XFRD_HTTP_H_
-
-enum {
-    HTTP_OK                              = 200,
-    HTTP_CREATED                         = 201,
-    HTTP_ACCEPTED                        = 202,
-    HTTP_NON_AUTHORITATIVE_INFORMATION   = 203,
-    HTTP_NO_CONTENT                      = 204,
-    HTTP_RESET_CONTENT                   = 205,
-    HTTP_PARTIAL_CONTENT                 = 206,
-    HTTP_MULTI_STATUS                    = 207,
-
-    HTTP_MULTIPLE_CHOICE                 = 300,
-    HTTP_MOVED_PERMANENTLY               = 301,
-    HTTP_FOUND                           = 302,
-    HTTP_SEE_OTHER                       = 303,
-    HTTP_NOT_MODIFIED                    = 304,
-    HTTP_USE_PROXY                       = 305,
-    HTTP_TEMPORARY_REDIRECT              = 307,
-
-    HTTP_BAD_REQUEST                     = 400,
-    HTTP_UNAUTHORIZED                    = 401,
-    HTTP_PAYMENT_REQUIRED                = 402,
-    HTTP_FORBIDDEN                       = 403,
-    HTTP_NOT_FOUND                       = 404,
-    HTTP_NOT_ALLOWED                     = 405,
-    HTTP_NOT_ACCEPTABLE                  = 406,
-    HTTP_PROXY_AUTH_REQUIRED             = 407,
-    HTTP_REQUEST_TIMEOUT                 = 408,
-    HTTP_CONFLICT                        = 409,
-    HTTP_GONE                            = 410,
-    HTTP_LENGTH_REQUIRED                 = 411,
-    HTTP_PRECONDITION_FAILED             = 412,
-    HTTP_REQUEST_ENTITY_TOO_LARGE        = 413,
-    HTTP_REQUEST_URI_TOO_LONG            = 414,
-    HTTP_UNSUPPORTED_MEDIA_TYPE          = 415,
-    HTTP_REQUESTED_RANGE_NOT_SATISFIABLE = 416,
-    HTTP_EXPECTATION_FAILED              = 417,
-
-    HTTP_INTERNAL_SERVER_ERROR           = 500,
-    HTTP_NOT_IMPLEMENTED                 = 501,
-    HTTP_BAD_GATEWAY                     = 502,
-    HTTP_SERVICE_UNAVAILABLE             = 503,
-    HTTP_GATEWAY_TIMEOUT                 = 504,
-    HTTP_VERSION_NOT_SUPPORTED           = 505,
-    HTTP_INSUFFICIENT_STORAGE_SPACE      = 507,
-    HTTP_NOT_EXTENDED                    = 510,
-};
-#endif /* ! _XFRD_HTTP_H_ */
diff --git a/tools/xfrd/xdr.c b/tools/xfrd/xdr.c
deleted file mode 100644 (file)
index c4af04b..0000000
+++ /dev/null
@@ -1,316 +0,0 @@
-#include <errno.h>
-#include "xdr.h"
-
-#define MODULE_NAME "XDR"
-//#define DEBUG 1
-#undef DEBUG
-#include "debug.h"
-
-/** @file
- * XDR packer/unpacker for elements.
- *
- * string -> [T_STRING] [len:u16] <len bytes>
- * atom   -> [T_ATOM]   [len:u16] <len bytes>
- * uint   -> [T_UINT]   [value]
- * cons   -> [T_LIST]   {1 elt}* 0
- * null   -> [T_NULL]
- * none   -> [T_NONE]
- * bool   -> [T_BOOL]   { 0:u8 | 1:u8 }
- *
- * types packed as u16.
- *
- * So (a b c) -> [T_CONS] a [T_CONS] b [T_CONS] c [T_NULL]
- *    ()      -> [T_NULL]
- */
-
-int pack_bool(IOStream *io, int x){
-    int err=0;
-    //dprintf("> x=%d\n", x);
-    err = IOStream_print(io, "%c", 0xff & x);
-    if(err > 0) err = 0;
-    //dprintf("< err=%d\n", err);
-    return err;
-}
-
-int unpack_bool(IOStream *io, int *x){
-    int err = 0;
-    int c;
-    //dprintf(">\n");
-    c = IOStream_getc(io);
-    *x = (c < 0 ? 0 : c);
-    err = IOStream_error(io);
-    if(c < 0 && !err) err = -EIO;
-    //dprintf("< err=%d x=%d\n", err, *x);
-    return err;
-}
-
-int pack_ushort(IOStream *io, unsigned short x){
-    int err=0;
-    //dprintf("> x=%u\n", x);
-    err = IOStream_print(io, "%c%c",
-                         0xff & (x >>  8),
-                         0xff & (x      ));
-    if(err > 0) err = 0;
-    //dprintf("< err=%d\n", err);
-    return err;
-}
-
-int unpack_ushort(IOStream *io, unsigned short *x){
-    int err = 0;
-    int i, c = 0;
-    //dprintf(">\n");
-    *x = 0;
-    for(i = 0; i< 2; i++){
-        c = IOStream_getc(io);
-        if(c < 0) break;
-        *x <<= 8;
-        *x |= (0xff & c);
-    }
-    err = IOStream_error(io);
-
-    if(c < 0 && !err) err = -EIO;
-    //dprintf("< err=%d x=%u\n", err, *x);
-    return err;
-}
-
-int pack_type(IOStream *io, unsigned short x){
-    return pack_ushort(io, x);
-}
-
-int unpack_type(IOStream *io, unsigned short *x){
-    return unpack_ushort(io, x);
-}
-
-int pack_uint(IOStream *io, unsigned int x){
-    int err=0;
-    //dprintf("> x=%u\n", x);
-    err = IOStream_print(io, "%c%c%c%c",
-                         0xff & (x >> 24),
-                         0xff & (x >> 16),
-                         0xff & (x >>  8),
-                         0xff & (x      ));
-    if(err > 0) err = 0;
-    //dprintf("< err=%d\n", err);
-    return err;
-}
-
-int unpack_uint(IOStream *io, unsigned int *x){
-    int err = 0;
-    int i, c = 0;
-    //dprintf(">\n");
-    *x = 0;
-    for(i = 0; i< 4; i++){
-        c = IOStream_getc(io);
-        if(c < 0) break;
-        *x <<= 8;
-        *x |= (0xff & c);
-    }
-    err = IOStream_error(io);
-    if(c < 0 && !err) err = -EIO;
-    //dprintf("< err=%d x=%u\n", err, *x);
-    return err;
-}
-
-int pack_string(IOStream *io, Sxpr x){
-    int err = 0;
-    unsigned short n = 0xffff & string_length(x);
-    char *s = string_string(x);
-    int i;
-    //dprintf("> n=%d s=%s\n", n, s);
-    err = pack_ushort(io, n);
-    if(err) goto exit;
-    for(i = 0; i < n; i++){
-        err = IOStream_print(io, "%c", s[i]);
-        if(err < 0) break;
-    }
-    if(err > 0) err = 0;
-  exit:
-    //dprintf("< err=%d\n", err);
-    return err;
-}
-
-int unpack_string(IOStream *io, Sxpr *x){
-    int err;
-    unsigned short n;
-    int i, c = 0;
-    char *s;
-    Sxpr val = ONONE;
-    
-    //dprintf(">\n");
-    err = unpack_ushort(io, &n);
-    if(err) goto exit;
-    val = halloc(n+1, T_STRING);
-    if(NOMEMP(val)){
-        err = -ENOMEM;
-        goto exit;
-    }
-    s = string_string(val);
-    for(i=0; i<n; i++){
-        c = IOStream_getc(io);
-        if(c < 0) break;
-        s[i] = (char)c;
-    }
-    s[n] = '\0';
-  exit:
-    err = IOStream_error(io);
-    if(c < 0 && !err) err = -EIO;
-    if(err){
-        objfree(val);
-        val = ONONE;
-    }
-    *x = val;
-    //IOStream_print(iostdout, "n=%d str=", n); 
-    //objprint(iostdout, *x, 0);
-    //IOStream_print(iostdout, "\n");
-    //dprintf("< err=%d\n", err);
-    return err;
-}
-
-int pack_cons(IOStream *io, Sxpr x){
-    int err = 0;
-    Sxpr l;
-    //dprintf(">\n");
-    for(l = x; CONSP(l); l = CDR(l)){
-        err = pack_bool(io, 1);
-        if(err) goto exit;
-        err = pack_sxpr(io, CAR(l));
-        if(err) goto exit;
-    }
-    err = pack_bool(io, 0);
-  exit:
-    //dprintf("< err=%d\n", err);
-    return err;
-}
-
-int unpack_cons(IOStream *io, Sxpr *x){
-    int err = 0;
-    int more = 0;
-    Sxpr u = ONONE, v = ONONE, val = ONULL;
-
-    dprintf(">\n");
-    while(1){
-        err = unpack_bool(io, &more);
-        if(err) goto exit;
-        if(!more){
-            //IOStream_print(iostdout, "unpack_cons 1 val=");
-            ////objprint(iostdout, val, 0);
-            IOStream_print(iostdout, "\n");
-
-            val = nrev(val);
-
-            //IOStream_print(iostdout, "unpack_cons 2 val=");
-            //objprint(iostdout, val, 0);
-            //IOStream_print(iostdout, "\n");
-
-            break;
-        }
-        err = unpack_sxpr(io, &u);
-        if(err) goto exit;
-        v = cons_new(u, val);
-        if(NOMEMP(v)){
-            err = -ENOMEM;
-            objfree(u);
-            goto exit;
-        }
-        val = v;
-    }
-  exit:
-    if(err){
-        objfree(val);
-        val = ONONE;
-    }
-    *x = val;
-    dprintf("< err=%d\n", err);
-    return err;
-}
-    
-int pack_sxpr(IOStream *io, Sxpr x){
-    int err = 0;
-    unsigned short type = get_type(x);
-    //dprintf(">\n");
-    //objprint(iostdout, x, 0);
-    //IOStream_print(iostdout, "\n");
-
-    err = pack_type(io, type);
-    if(err) goto exit;
-    switch(type){
-    case T_NULL:
-        break;
-    case T_NONE:
-        break;
-    case T_BOOL:
-        err = pack_bool(io, get_ul(x));
-        break;
-    case T_CONS:
-        err = pack_cons(io, x);
-        break;
-    case T_ATOM:
-        err = pack_string(io, OBJ_ATOM(x)->name);
-        break;
-    case T_STRING:
-        err = pack_string(io, x);
-        break;
-    case T_UINT:
-        err = pack_uint(io, get_ul(x));
-        break;
-    default:
-        err = -EINVAL;
-        IOStream_print(iostderr, "%s> invalid type %d\n", __FUNCTION__, type);
-        break;
-    }
-  exit:
-    //dprintf("< err=%d\n", err);
-    return err;
-}
-
-int unpack_sxpr(IOStream *io, Sxpr *x){
-    int err = 0;
-    unsigned short type;
-    unsigned int u;
-    Sxpr val = ONONE, y;
-
-    //dprintf(">\n");
-    err = unpack_type(io, &type);
-    if(err) goto exit;
-    switch(type){
-    case T_NULL:
-        val = ONULL;
-        break;
-    case T_NONE:
-        val = ONONE;
-        break;
-    case T_CONS:
-        err = unpack_cons(io, &val);
-        break;
-    case T_BOOL:
-        err = unpack_bool(io, (int *)&u);
-        if(err) goto exit;
-        val = (u ? OTRUE : OFALSE);
-        break;
-    case T_ATOM:
-        err = unpack_string(io, &y);
-        if(err) goto exit;
-        val = intern(string_string(y));
-        objfree(y);
-        break;
-    case T_STRING:
-        err = unpack_string(io, &val);
-        break;
-    case T_UINT:
-        err = unpack_uint(io, &u);
-        if(err) goto exit;
-        val = OBJI(type, u);
-        break;
-    default:
-        err = -EINVAL;
-        IOStream_print(iostderr, "%s> invalid type %d\n", __FUNCTION__, type);
-        break;
-    }
-  exit:
-    *x = (err ? ONONE : val);
-    //IOStream_print(iostdout, "sxpr="); 
-    //objprint(iostdout, *x, 0);
-    //IOStream_print(iostdout, "\n");
-    //dprintf("< err=%d\n", err);
-    return err;
-}
diff --git a/tools/xfrd/xdr.h b/tools/xfrd/xdr.h
deleted file mode 100644 (file)
index 793cd34..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-#ifndef _XUTIL_XDR_H_
-#define _XUTIL_XDR_H_
-#include "iostream.h"
-#include "sxpr.h"
-
-int pack_type(IOStream *io, unsigned short x);
-
-int unpack_type(IOStream *io, unsigned short *x);
-
-int pack_bool(IOStream *io, int x);
-
-int unpack_bool(IOStream *io, int *x);
-
-int pack_uint(IOStream *out, unsigned int x);
-
-int unpack_uint(IOStream *in, unsigned int *x);
-
-int pack_string(IOStream *out, Sxpr x);
-
-int unpack_string(IOStream *in, Sxpr *x);
-
-int pack_cons(IOStream *out, Sxpr x);
-
-int unpack_cons(IOStream *in, Sxpr *x);
-
-int pack_sxpr(IOStream *out, Sxpr x);
-
-int unpack_sxpr(IOStream *in, Sxpr *x);
-
-#endif /* _XUTIL_XDR_H_ */